/**
 * 事件队列
 */ 
package xFGE.event
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.TimerEvent;
	import flash.utils.Timer;	
	
	public class EventQueue extends EventDispatcher
	{
		private var _queue:Array = new Array();
		private var _lockQueue:Boolean = false;//是否不可插入，不可抛出
		private var _timer:Timer;
		private var _lockPop:Boolean = true;//是否可以抛出件
		
		public function EventQueue()
		{
			_timer = new Timer(100,3600);
			_timer.addEventListener(TimerEvent.TIMER,tick);
			_timer.addEventListener(TimerEvent.TIMER_COMPLETE,timerComplete);
			_timer.start();
		}
		
		/**
		 * 检查是否有事件可以抛出
		 */ 
		private function tick(event:Event):void
		{
			if(_lockQueue == false && _lockPop && _queue.length > 0)
			{
				this.dispatchEvent(_queue.pop());
			}
		}
		/**
		 * 当一个因事件而发生的动作执行完成后，解锁事件队列
		 */ 
		public function unlockQueue():void
		{
			_lockQueue = false;
		}
		private function timerComplete(event:Event):void
		{
			_timer.reset();
			_timer.start();
		}
		/**
		 * 插入一个事件入队列
		 * 1.锁住队列
		 * 2.插入
		 * 3.排序
		 */ 
		public function pushQueue(evt:InQueueEvent):void
		{
			_lockQueue = true;
			if(evt._rip == 0)
			{
				dispatchEvent(evt);//优先级为0的事件需要马上抛出
			}
			else
			{
				_queue.unshift(evt);//将一个或多个元素添加到数组的开头，并返回该数组的新长度
			}
			//根据优先级排序
//			_queue.sortOn("rip");
			_lockQueue = false;
		}
		public function set lockPop(value:Boolean):void
		{
			_lockPop = value;
		}
		public function get lockPop():Boolean
		{
			return _lockPop;
		}
	}
}